﻿using System.Data.Common;

namespace eg_008_引用
{
    internal class Program
    {
        class Circle
        {
            public int Radius;
        }
        struct Column
        {
            public Circle Circle;
            public int Height;
        }
        static void Main(string[] args)
        {
            Column column1 = new Column();                          //创建圆柱体1
            Circle circle1 = new Circle();                          //创建圆形1
            column1.Height = 20;                                    //设置圆柱体1的高度
            column1.Circle = circle1;                           //将圆形1赋值给圆柱体1底面圆形
            circle1.Radius = 10;                                    //设置圆形1半径
            Console.WriteLine("圆柱体1高度:{0}", column1.Height);    //输出圆柱体1的高度
            Console.WriteLine("圆柱体1底面半径:{0}", column1.Circle.Radius); //输出圆柱体1底面半径
            Console.WriteLine("将圆柱体1赋值给圆柱体2");

            Column column2 = column1;                               //将圆柱体1赋值给圆柱体2
            Console.WriteLine("将圆形1半径改为30");
            circle1.Radius = 30;                                    //修改圆形1的半径
            Console.WriteLine("圆柱体1底面半径:{0}", column1.Circle.Radius); //输出圆柱体1底面半径
            Console.WriteLine("圆柱体2底面半径:{0}", column2.Circle.Radius); //输出圆柱体2底面半径
            Console.WriteLine("圆柱体1高度:{0}", column1.Height);    //输出圆柱体1的高度
            Console.WriteLine("圆柱体2高度:{0}", column2.Height);    //输出圆柱体2的高度
            Console.WriteLine("将圆柱体2高度改为40");
            column2.Height = 40;                                    //修改圆柱体2的高度
            Console.WriteLine("圆柱体1高度:{0}", column1.Height);    //输出圆柱体1的高度
            Console.WriteLine("圆柱体2高度:{0}", column2.Height);    //输出圆柱体2的高度
        }
    }
}
///
/// 这里要注意的是，Column结构属于值类型，而 Circle 类型属于引用类型。
/// 实例代码中创建了一个 Column 对象column1和Circle对象circle1，
/// 将circle1对象赋值给column1的Circle成员变量，
/// 这个过程是将circle1的引用传递给column1的 Circle。
/// 后面对 circle1 的 Radius 成员变量的修改会导致 column1 的Circle变量的Radius成员值发生改变。
/// 实例代码中，将column1赋值给Column类型的column2，
/// 这个过程是值传递，将column1的一个副本传递给了column2，
/// 在复制的过程中，column1的Circle成员变量同样被复制了，但复制的是引用。
/// 因此，在对circle1的Radius成员值进行修改时会影响到column1、column2和Circle成员。
/// 但对column2的Height成员进行修改时并不会影响到column1的Height成员的值，
/// 因为在column2被赋值的时候，将column1的Height成员值赋值给了column2的Height成员
///